home *** CD-ROM | disk | FTP | other *** search
/ TeX 1995 July / TeX CD-ROM July 1995 (Disc 1)(Walnut Creek)(1995).ISO / systems / atari / birkhahn-metafont-packed-disks / mf27-2_2e-disk2.zoo / inputs / pandora.lzs / CAPS.MF next >
Text File  |  1991-08-15  |  39KB  |  993 lines

  1. %*****************************************************************************
  2. %        Copyright (c) 1989 by N. N. Billawala
  3. %*****************************************************************************
  4.  
  5.  
  6. % caps.mf  uppercase roman alphabet
  7.  
  8. % 26 characters
  9.  
  10.  
  11.  
  12. iff OK "A":  "The letter A"; 
  13.   beginchar("A",A_w*width#+e_mono#,cap#,0);
  14.  
  15.   min_limit(join_radius)(.5apex.uc);
  16.   top z20=(.5w,h+ov_apex.uc)//; pos20(apex.uc,0-apex_angle);
  17.   bot y3=0; z3l=whatever[z20l,(0,0)];
  18.   bot y6=0; z6r=whatever[z20r,(w,0)];
  19.   z20l=z1l; z20r=z4r;
  20.   multpos(1,3)(thin_stem.uc,constant_angle(z20l,(0,0),0));
  21.   multpos(4,6)(stem.uc,constant_angle(z20r,(w,0),0));
  22.  
  23.   onaline(1l,3l)(2l);          y2l=y5r=cap_bracket_h; 
  24.   onaline(1r,3r)(2r,40,41,44); 
  25.   onaline(4l,6l)(5l,40,42,43); 
  26.   y41=y42=round(.45[serif_thickness,y40]-.35thin_stem.uc);        % bar bottom
  27.   y43=y44=y41+max(1,.7thin_stem.uc);
  28.   onaline(4r,6r)(5r);          y2r=y5l=min(y41,cap_bracket_h); 
  29.   ref1=z43--z40--z44; 
  30.  
  31.   p1 =(fullserif.l(z3,z1,z2l,z2r,.5hs,.5hs) soften(z41,z42)
  32.        fullserif.r(z6,z4,z5l,z5r,.5hs,.5hs) soften(z20r,z20l) z2l)--cycle;
  33.   p1'=upnotch(ref1,angle(z20-z40),notch_length.uc)--cycle;
  34.  
  35.   showpoints(1,2,3,4,5,6,20,40,41,42,43,44);
  36. adjust(v_E*fitbasis.uc#+m_a*e_mfit#,v_D*fitbasis.uc#+m_a*e_mfit#); 
  37. show_character; endchar;
  38.  
  39.  
  40.  
  41. iff OK "B":  "The letter B"; 
  42.   beginchar("B",B_w*width#+b_mono#,cap#,0);
  43.  
  44.   top lft z11l=(0,h)//;           multpos(11,14)(stem.uc,0);
  45.   bot lft z14l=(0,0);     
  46.   onaline(11l,14l)(12l,13l);      y13l=cap_bracket_h;
  47.   onaline(11r,14r)(1,5,5l,5r,9);  y12l=max(h-cap_bracket_h,y13l);
  48.    
  49.   top y2r=h;
  50.   bot y1=bot y2l=top y2r-minor_curve.uc;
  51.   y5=.55h;
  52.   top y4r=top y5r=round(y5+.45thin_stem.uc);
  53.   bot y4l=bot y5l=top y5r-max(1,.9thin_stem.uc);
  54.   y6=.75[y5l,y5r];
  55.   bot y8r=0; top y8l=top y9=bot y8r+minor_curve.uc;    
  56.   rt z3r=(round(.9w),v_stress[y6,y2r])//;
  57.   lft z3l=(rt x3r-max(1,.9bowlstem.uc),v_stress[y5r,y2l]);
  58.   rt z7r=(w,v_stress[y8r,y6])//; lft z7l=(rt x7r-bowlstem.uc,v_stress[y8l,y4l]);
  59.   z3=.5[z3l,z3r];
  60.  
  61.   good_x_for(2r)(z1,z3r,.4)a;   good_x_for(2l)(z1,z3l,.4)b;
  62.   good_x_for(4r)(z5r,z3l,.4)c;  good_x_for(4l)(z5l,z7l,.4)d;                
  63.   good_x_for(6)(z5,z3,.6)e;                                 
  64.   good_x_for(8l)(z9,z7l,.4)f;   good_x_for(8r)(z9,z7r,.4)g;  
  65.  
  66.   p1 =leftserif(z11,z14,z12l,z14r,.5hs)--leftserif(z14,z11,z13l,z11r,.5hs)
  67.       ...z8r{right} o_t z7r{upward} o_t z6{left}--
  68.       z6+(0,epsilon){right} o_t z3r{upward} o_t z2r{left}...cycle;
  69.   p1'=z4r{right} i_t z3l{upward} i_t z2l{left}...z1--z5r...cycle; 
  70.   p2'=z8l{right} i_t z7l{upward} i_t z4l{left}...z5l--z9...cycle;
  71.  
  72.   showpoints(1,2,3,4,5,6,7,8,9,11,12,13,14);
  73. adjust(v_A*fitbasis.uc#+m_b*b_mfit#,v_F*fitbasis.uc#+m_bb*b_mfit#); 
  74. show_character; endchar;
  75.  
  76.  
  77. iff OK "C":  "The letter C"; 
  78.   beginchar("C",H_w*width#+d_mono#,cap#,0);
  79.  
  80.   save_num(term_length)=if bulb_taper:c_and_s.uc else:cs fi;
  81.   rt z1=(.95w,.9h)//;
  82.   lft z3l=(0,(1-v_stress)*h)//;  rt z3r=lft z3l+(bowlstem.uc,0);  
  83.   rt z5l=(w,major_curve.uc-ov_t.uc+.05h)//;            
  84.   top y2l=bot y2r+minor_curve.uc=h+ov_t.uc; 
  85.   bot y4l=top y4r-major_curve.uc=-ov_t.uc; 
  86.   good_x_for(2l)(z3l,z1,.6)a;  good_x_for(2r)(z3r,z1-(bulb_thickness,0),.6)b; 
  87.   good_x_for(4l)(z3l,z5l,.5)c;
  88.   ref1=z4l{right}...z5l;
  89.   pos5(max(1,.7major_curve.lc),angle(direction 1 of ref1)+90);
  90.   good_x_for(4r)(z3r,z5r,.5)d; 
  91.   x4r:=min(x4r,x4l+minor_curve.uc);
  92.  
  93.   p1=(bulb.tr(z1,z2r,z2l,term_length,bulb_thickness,90) o_t
  94.      z3l{downward} o_t z4l{right} o_t z5l 
  95.      if softpath:)softjoin(z5l--z5r)softjoin(else:--fi 
  96.      z5r i_t z4r{left} i_t z3r{upward} i_t z2r{right})--cycle;
  97.   
  98.   showpoints(1,2,3,4,5);
  99. adjust(v_C*fitbasis.uc#+m_d*d_mfit#,v_H*fitbasis.uc#+m_dd*d_mfit#); 
  100. show_character; endchar;
  101.  
  102.  
  103. iff OK "D":  "The letter D"; 
  104.   beginchar("D",D_w*width#+d_mono#,cap#,0);
  105.  
  106.   top lft z11l=(0,h)//;      multpos(11,14)(stem.uc,0);
  107.   bot lft z14l=(0,0);       
  108.   onaline(11l,14l)(12l,13l); y13l=cap_bracket_h; 
  109.   onaline(11r,14r)(1,5);     y12l=max(h-cap_bracket_h,y13l);
  110.  
  111.   top y2r=h;
  112.   bot y1=bot y2l=top y2r-major_curve.uc;
  113.   bot y4r=0;
  114.   top y5=top y4l=bot y4r+minor_curve.uc;
  115.   rt z3r=(w,v_stress*h)//; lft z3l=(rt x3r-bowlstem.uc,v_stress*h);  
  116.  
  117.   good_x_for(2r)(z1,z3r,.4)a;  good_x_for(2l)(z1,z3l,.4)b;
  118.   good_x_for(4r)(z5,z3r,.3)c;  good_x_for(4l)(z5,z3l,.3)d;                
  119.  
  120.   p1 =leftserif(z11,z14,z12l,z14r,.5hs)--leftserif(z14,z11,z13l,z11r,.5hs)
  121.       ...z4r{right} o_t z3r{upward} o_t z2r{left}...cycle;
  122.   p1'=(z4l{right} i_t z3l{upward} i_t z2l{left} soften(z1,z5)z4l{right})--cycle;
  123.  
  124.   showpoints(1,2,3,4,5,11,12,13,14);
  125. adjust(v_A*fitbasis.uc#+m_b*d_mfit#,v_C*fitbasis.uc#+m_bb*d_mfit#); 
  126. show_character; endchar;
  127.  
  128.  
  129. iff OK "E":  "The letter E"; 
  130.   beginchar("E",E_w*width#+b_mono#,cap#,0);
  131.  
  132.   top lft z11l=(0,h)//;           multpos(11,14)(stem.uc,0);
  133.   bot lft z14l=(0,0);             
  134.   onaline(11l,14l)(12l,13l);      y13l=cap_bracket_h; 
  135.   onaline(11r,14r)(1,4,4l,4r,6);  y12l=max(h-cap_bracket_h,y13l);
  136.   
  137.   top y2r=h; 
  138.   bot y1=bot y2l=top y2r-max(1,.95thin_stem.uc);
  139.   top rt z3=(.95w,h)//;
  140.   bot y7l=0; 
  141.   bot rt z8=(w,0);
  142.   top y6=top y7r=bot y7l+max(1,.97thin_stem.uc); 
  143.   y4=.55h; 
  144.   top y4r=bot y4l+max(1,.9thin_stem.uc)=top y5r=round(y4+.45thin_stem.uc);
  145.   
  146.   good_x_for(2r)(z1,z3,.6)a;  good_x_for(2l)(z1,z3,.6)b;
  147.   good_x_for(7r)(z6,z8,.6)c;  good_x_for(7l)(z6,z8,.6)d;                
  148.   good_x_for(5r)(z4,z3,.8)e;
  149.  
  150.   p1=(leftserif(z14,z11,z13l,z11r,.5hs)..
  151.       arm.br(z8,z7r,z7l,.5as,.75tip_thickness,90-arm_angle)soft soften(z6,z4l)
  152.       arm.tr(z5r,z4l,z4r,.15as,.25tip_thickness,90) soften(z4r,z1)
  153.       arm.tr(z3,z2l,z2r,.4as,.75tip_thickness,90)soft...
  154.       leftserif(z11,z14,z12l,z14r,.75hs))--cycle;
  155.  
  156.   showpoints(1,2,3,4,5,6,7,11,12,13,14);
  157. adjust(v_A*fitbasis.uc#+m_b*b_mfit#,v_F*fitbasis.uc#+m_bb*b_mfit#); 
  158. show_character; endchar;
  159.  
  160.  
  161. iff OK "F":  "The letter F"; 
  162.   beginchar("F",E_w*width#+b_mono#,cap#,0);
  163.  
  164.   top y2r=h; 
  165.   bot y1=bot y2l=top y2r-max(1,.95thin_stem.uc);
  166.   top rt z3=(w,h)//;
  167.   top y4r=bot y4l+max(1,.9thin_stem.uc)=top y5r=round(.52h);
  168.  
  169.   top lft z11l=(0,h)//;           multpos(11,14)(stem.uc,0);
  170.   bot lft z14l=(0,0);         
  171.   onaline(11l,14l)(12l,13l);      y13l=cap_bracket_h; y13r=min(y13l,y4l);  
  172.   onaline(11r,14r)(1,4l,4r,13r);  y12l=max(h-cap_bracket_h,y13l);
  173.  
  174.   good_x_for(2r)(z1,z3,.6)a;  good_x_for(2l)(z1,z3,.6)b;
  175.   good_x_for(5r)(z4r,z3,.8)c;
  176.  
  177.   p1=(fullserif(z14,z11,z13l,z13r,.5hs,.75hs)..z4l 
  178.         if softpath:)softjoin(else:--fi
  179.       arm.tr(z5r,z4l,z4r,.15as,.25tip_thickness,90) soften(z4r,z1)
  180.       arm.tr(z3,z2l,z2r,.4as,.75tip_thickness,90)soft...
  181.       leftserif(z11,z14,z12l,z14r,.75hs))--cycle;
  182.  
  183.   showpoints(1,2,3,4,5,11,12,13,14);
  184. adjust(v_A*fitbasis.uc#+m_b*b_mfit#,v_G*fitbasis.uc#+m_bb*b_mfit#); 
  185. show_character; endchar;
  186.  
  187.  
  188.  
  189.  def character_points=
  190. iff OK "G":  "The letter G";    
  191.   beginchar(71+alt9,D_w*width#+d_mono#,cap#,0);
  192.   save_num(term_length)=if bulb_taper:c_and_s.uc else:cs fi;
  193.   rt z1=(w-.25stem.uc,.9h)//;
  194.   lft z3l=(0,(1-v_stress)*h)//; rt z3r=(lft x3l+bowlstem.uc,(1-v_stress)*h);
  195.   top y2l=bot y2r+minor_curve.uc=h+ov_t.uc; 
  196.   bot y4l=top y4r-major_curve.uc=-ov_t.uc; 
  197.   good_x_for(2l)(z3l,z1,.6)a;  good_x_for(2r)(z3r,z1-(bulb_thickness,0),.6)b;
  198.   good_x_for(4l)(z3l,z5l,.5)c; good_x_for(4r)(z3r,z5r,.5)d; 
  199.   rt z5l=(w,.15h)//;           pos5(max(1,.75minor_curve.uc),130-oblique);  
  200.   z11r=(w,min(.45h,y1-as))//;  multpos(11,13)(stem.uc,0);
  201.   rt z13r=(w,0);
  202.     z20=(z5l--z5r i_t z4r{left})intersectionpoint(z11l--z13l);
  203.   onaline(11r,13r)(12r);
  204.    y12r=inlimit(y11r-cap_bracket_h)(y5l,y11r-serif_thickness);
  205.   onaline(11l,13l)(12l);        y12l=inlimit(y12r)(y20,y11l);
  206.   ref1=z4l{right} o_t z5l; ref2=z13--z20;       % pts added for terminal finish
  207.   z21=ref1 intersectionpoint ref2; 
  208.   (t1,t2)=ref1 intersectiontimes ref2;
  209.  
  210.   p1=(bulb.tr(z1,z2r,z2l,term_length,bulb_thickness,90) o_t z3l{downward} o_t  
  211.      if G_spur:subpath (0,t1) of ref1 soften(z21,z13,z13r)        % spur option
  212.         else:z4l{right} o_t z5l if softpath:)softjoin( else:--fi fi
  213.       z5l--fullserif.r(z11,z13,z12l,z12r,.75hs,.25hs)--z20 
  214.         if softpath:)softjoin( else:--fi
  215.       z20 i_t z4r{left} i_t z3r{upward} i_t z2r{right})--cycle;
  216.   showpoints(1,2,3,4,5,11,12,13,20,21);
  217.   adjust(v_C*fitbasis.uc#+m_b*d_mfit#,v_F*fitbasis.uc#+m_bb*d_mfit#); 
  218.   show_character; endchar;
  219.  enddef;
  220.  
  221.  vardef letter_G= save a,b;
  222.   vardef a=condition(G_spur)t; testing_codes; character_points; enddef; % spur
  223.   vardef b=condition(G_spur)f; testing_codes; character_points; enddef; % nospur
  224.   if test_all_characters:a;b; else:if G_spur:a; else:b; fi fi
  225.  enddef;
  226.  
  227.  letter_G;  save letter_G;
  228.  
  229.  
  230. iff OK "H":  "The letter H"; 
  231.   beginchar("H",H_w*width#+b_mono#,cap#,0);
  232.  
  233.   top lft z1l=(0,h)//;        multpos(1,4,11,14)(stem.uc,0);
  234.   bot lft z4l=(0,0);         
  235.   top rt z11r=(w,h)//;
  236.   bot rt z14r=(w,0);
  237.   onaline(1r,4r)(5l,5r);      top y5r=top y15r=round(.55h+.45thin_stem.uc);
  238.   onaline(11l,14l)(15l,15r);  bot y5l=bot y15l=top y5r-max(1,.9thin_stem.uc);
  239.   onaline(1l,4l)(2l,3l);      y3l=y13r=cap_bracket_h;   
  240.   onaline(1r,4r)(2r,3r);      y3r=y13l=min(cap_bracket_h,y5l);
  241.   onaline(11r,14r)(12r,13r);  y2r=y12l=max(h-cap_bracket_h,y5r);
  242.   onaline(11l,14l)(12l,13l);  y2l=y12r=max(h-cap_bracket_h,y3l);
  243.  
  244.   p1=(fullserif(z4,z1,z3l,z3r,.5hs,.75hs) soften(z5l,z15l)
  245.       fullserif(z14,z11,z13l,z13r,.5hs,.75hs)--
  246.       fullserif(z11,z14,z12l,z12r,.75hs,.5hs) soften(z15r,z5r)
  247.       fullserif(z1,z4,z2l,z2r,.75hs,.5hs))--cycle;
  248.  
  249.   showpoints(1,2,3,4,5,11,12,13,14,15);
  250. adjust(v_A*fitbasis.uc#+m_a*b_mfit#,v_A*fitbasis.uc#+m_a*b_mfit#); 
  251. show_character; endchar;
  252.  
  253.  
  254. iff OK "I":  "The letter I"; 
  255.   beginchar("I",I_w*width#+a_mono#,cap#,0);
  256.  
  257.   bot lft z4l=(if singlepitch:round(.5(w-stem.uc)) else:0 fi,0)//;    
  258.   top lft z1l=(if singlepitch:round(.5(w-stem.uc)) else:0 fi,h)//;    
  259.   multpos(1,4)(stem.uc,0);
  260.   onaline(1l,4l)(2l,3l);  y3l=y3r=cap_bracket_h; 
  261.   onaline(1r,4r)(2r,3r);  y2l=y2r=max(h-cap_bracket_h,y3l);
  262.  
  263.   p1=fullserif(z1,z4,z2l,z2r,.75hs,.5hs)--
  264.      fullserif(z4,z1,z3l,z3r,.5hs,.75hs)--cycle;
  265.  
  266.   if singlepitch:pickup pencircle yscaled thin_stem.uc rotated -oblique;
  267.     lft top z11=(0,h); rt top z12=(w,h); lft bot z13=(0,0); rt bot z14=(w,0);
  268.     draw z11--z12; draw z13--z14; showpoints(11,12,13,14);
  269.     fi  
  270.  
  271.   showpoints(1,2,3,4);
  272. adjust(v_A*fitbasis.uc#+m_a*a_mfit#,v_A*fitbasis.uc#+m_a*a_mfit#); 
  273. show_character; endchar;
  274.  
  275.  
  276. iff OK "J":  "The letter J";  
  277.   beginchar("J",J_w*width#+a_mono#,cap#,descender#);
  278.  
  279.   rt z40r=(w,0);           multpos(1,40)(stem.uc,0);
  280.   top rt z1r=(w,h)//;
  281.   save_num(knob)=min(bulb_thickness,.6x40l);            
  282.   onaline(1r,40r)(2r,3r);  y3l=.25h; y3r=y3l-.1h; 
  283.   onaline(1l,40l)(2l,3l);  y2l=y2r=max(h-cap_bracket_h,y3l,y3r);  
  284.   bot y4r=top y4l-minor_curve.uc=-.5d-ov_b.uc;
  285.     good_x_for(4r)(z5,z3r,.4)a;                  
  286.     good_x_for(4l)(z5+(knob,0),z3l,.4)b;
  287.   lft z5=(0,.5[y4r,y4l])//;   
  288.  
  289.   p1=terminalserif.l(z1,z40,z2l,z2r,ts,0) o_t z3l{downward} o_t 
  290.      bulb.bl(z5,z4l,z4r,.75cs,knob,90) i_t z3r{upward} i_t cycle;
  291.  
  292.   if singlepitch:pickup pencircle yscaled thin_stem.uc rotated -oblique;
  293.     lft top z11=(.25w,h); rt top z12=(x1,h);
  294.     draw z11--z12; showpoints(11,12);
  295.     fi  
  296.  
  297.   showpoints(1,2,3,4,5,40);
  298. adjust(m_dd*a_mfit#,.9v_A*fitbasis.uc#+m_d*a_mfit#); 
  299. show_character; endchar;
  300.  
  301.  
  302.  
  303.  def K_without_beveled_join=
  304. iff OK "K":  "The letter K"; 
  305.   beginchar(75+alt5,R_w*width#+d_mono#,cap#,0); 
  306.   top lft z11l=(0,h)//;             multpos(11,14)(stem.uc,0);
  307.   bot lft z14l=(0,0);               
  308.   onaline(11r,14r)(12r,13r,3r,41);  y3r=.4h; y13l=cap_bracket_h;
  309.   onaline(11l,14l)(12l,13l);        y13r=max(y3r,y13l);
  310.                                     y12l=max(h-cap_bracket_h,y13l);
  311.   top rt z1r=(.95w,h)//; 
  312.   multpos(1,3)(max(1,.9thin_stem.uc),constant_angle(z1r,z3r,0));   
  313.   onaline(1,3)(44);                 top y44=h;
  314.   onaline(1l,3l)(2l,4l,41);         y12r=y2l=max(h-cap_bracket_h,y41);
  315.   onaline(1r,3r)(2r,40,42);         
  316.   y4l=.1[y41,y44];                 % y4l places bot/right arm
  317.   z6r=(w,0);
  318.   multpos(4,6)(max(1,.9stem.uc),constant_angle(z4l,z6r,max(1,.9stem.uc))lr); 
  319.   onaline(4r,6r)(5r,42);  y2r=max(h-cap_bracket_h,y42); 
  320.   onaline(4l,6l)(5l,40);  y5l=y5r=min(cap_bracket_h,y4l,y40);
  321.   onaline(4,6)(43);       bot y43=0;
  322.  
  323.   p1=(fullserif(z14,z11,z13l,z13r,.5hs,.5hs) soften(z3r,z40)
  324.       fullserif.r(z43,z4,z5l,z5r,.5hs,.5hs)--z42 
  325.         if softpath:)softjoin(z42 fi--
  326.       fullserif.r(z44,z3,z2l,z2r,.5hs,.5hs)--z41
  327.         if softpath:)softjoin(z41 fi--
  328.       fullserif(z11,z14,z12l,z12r,.75hs,.5hs))--cycle; 
  329.  
  330.   showpoints(1,2,3,4,5,6,11,12,13,14,40,41,42,43,44);
  331.   adjust(v_A*fitbasis.uc#+m_b*d_mfit#,v_G*fitbasis.uc#+m_bb*d_mfit#); 
  332.   show_character; endchar;
  333.  enddef;
  334.  
  335.  def K_with_beveled_join= 
  336. iff OK "K":  "The letter K"; 
  337.   beginchar(75+alt5,T_w*width#+d_mono#,cap#,0);
  338.   top lft z11l=(0,h)//;       multpos(11,14)(stem.uc,0);
  339.   bot lft z14l=(0,0);         
  340.   onaline(11l,14l)(12l,13l);  y13l=y13r=cap_bracket_h; 
  341.   onaline(11r,14r)(12r,13r);  y12l=y12r=max(h-cap_bracket_h,y13l);
  342.   ref1=rightserif(z14,z11,z13l,z13r,.5hs)--rightserif(z11,z14,z12l,z12r,.5hs);
  343.   top rt z1r=(.95w,h)//;   
  344.   z3l=z4l=ref1 intersectionpoint ((0,.55h)--(w,.55h));
  345.   z6r=(w,0);
  346.  
  347.   multpos(4,6)(max(1,.9stem.uc),constant_angle(z4l,z6r,max(1,.9stem.uc))lr);
  348.   multpos(1,3)(max(1,.9thin_stem.uc),constant_angle(z1r,z4l,thin_stem.uc));     
  349.  
  350.   onaline(1l,3l)(2l);   
  351.   onaline(1r,3r)(2r,42);   
  352.   onaline(1,3)(44);       top y44=h;
  353.   onaline(4r,6r)(5r,42);  y2l=y2r=max(h-cap_bracket_h,y4l,y42); 
  354.   onaline(4l,6l)(5l);     y5l=y5r=min(cap_bracket_h,y4l,y42);
  355.   onaline(4,6)(43);       bot y43=0;
  356.  
  357.   p1=fullserif(z14,z11,z13l,z13r,.5hs,.5hs)--
  358.      fullserif(z11,z14,z12l,z12r,.75hs,.5hs)--cycle; 
  359.   p2=(terminalserif.r(z43,z4,z5l,z5r,.5ts,base_terminal_angle)--z42 
  360.        if softpath:)softjoin(z42 fi--
  361.      fullserif.r(z44,z3,z2l,z2r,.5hs,.5hs)--z4l)--cycle;
  362.  
  363.   showpoints(1,2,3,4,5,6,11,12,13,14,42,43,44);
  364.   adjust(v_A*fitbasis.uc#+m_b*d_mfit#,v_G*fitbasis.uc#+m_bb*d_mfit#); 
  365.   show_character; endchar;
  366.  enddef;
  367.  
  368.  vardef letter_K= save a,b;
  369.   vardef a=condition(beveled_join)t;testing_codes;K_with_beveled_join;enddef;
  370.   vardef b=condition(beveled_join)f;testing_codes;K_without_beveled_join;enddef;
  371.   if test_all_characters:a;b;else:if beveled_join:a; else:b; fi fi
  372.  enddef;
  373.  
  374.  letter_K;  save letter_K,K_with_beveled_join,K_without_beveled_join;
  375.  
  376.  
  377.  
  378. iff OK "L":  "The letter L"; 
  379.   beginchar("L",E_w*width#+b_mono#,cap#,0);
  380.  
  381.   top lft z11l=(0,h)//;       multpos(11,14)(stem.uc,0);
  382.   bot lft z14l=(0,0);        
  383.   onaline(11l,14l)(12l,13l);  y13l=cap_bracket_h;
  384.   onaline(11r,14r)(1,12r);    y12l=y12r=max(h-cap_bracket_h,y13l);
  385.   bot y2l=0; 
  386.   bot rt z3=(w,0);
  387.   top y1=top y2r=bot y2l+max(1,.95thin_stem.uc);
  388.   z0=z1-(0*stem.uc,0);
  389.   good_x_for(2r)(z1,z3,.6)a;  good_x_for(2l)(z1,z3,.6)b;                
  390.  
  391.   p1=(leftserif(z14,z11,z13l,z11r,.5hs)...
  392.       arm.br(z3,z2r,z2l,.5as,.75tip_thickness,90-arm_angle)soft
  393.         if softpath:...z1)softjoin(z1--
  394.          else:...z0{left}--(z0+(0,eps)){right}... fi
  395.       fullserif(z11,z14,z12l,z12r,.5hs,.75hs))--cycle;
  396.  
  397.   showpoints(0,1,2,3,11,12,13,14);
  398. adjust(v_A*fitbasis.uc#+m_f*b_mfit#,v_I*fitbasis.uc#+m_ff*b_mfit#); 
  399. show_character; endchar;
  400.  
  401.  
  402.  
  403. iff OK "M":  "The letter M"; 
  404.   beginchar("M",M_w*width#+f_mono#,cap#,0);
  405.  
  406.   save_bool(nonotch):=if(cap<40):true else:false fi;      % if real low res
  407.   min_limit(join_radius)(.5apex.uc);
  408.   lft x3l=0; bot y3=0; 
  409.   rt x12r=w; bot y12=0;
  410.   top z31l=(.0w,h+ov_apex.uc)//;multpos(21,22,23,31,33)(apex.uc,0-apex_angle);
  411.   top z33r=(1w,h+ov_apex.uc)//;
  412.   multpos(1,3)(thin_stem.uc,constant_angle(z31l,(0,0),0)); 
  413.   multpos(10,12)(if narrow_condition:w_narrow_amt
  414.                   else:1 fi[thin_stem.uc,stem.uc],constant_angle(z33r,(w,0),0));
  415.   onaline(3l,31l)(2l,21l);   y21=y23=h+ov_apex.uc;
  416.   onaline(12r,33r)(11r,23r);
  417.   good_x_for(22)(z3r,z12l,.5)a;  y22=if singlepitch:.25 else:.07 fi *y21;
  418.  
  419.   z1l=z21l; z4r=z21r; z6l=z22l; z9r=z22r; z7l=z23l; z10r=z23r;
  420.   multpos(4,6)(if narrow_condition:w_narrow_amt else:1 fi[thin_stem.uc,stem.uc],
  421.                constant_angle(z21r,z22l,stem.uc));     
  422.   multpos(7,9)(thin_stem.uc,constant_angle(z23l,z22r,thin_stem.uc)lr);       
  423.  
  424.   onaline(1r,3r)(2r,41);       
  425.   onaline(4l,6l)(5l,41); 
  426.   onaline(4r,6r)(5r,42);           
  427.   onaline(7l,9l)(8l,42);    y5r=y8l=notch_pos[y42,y1];
  428.   onaline(7r,9r)(8r,43);   
  429.   onaline(10l,12l)(11l,43); y5l=y8r=notch_pos[min(y41,y43),y6]; 
  430.   y2l=y2r=y11l=y11r=min(cap_bracket_h,y41,y43); 
  431.   ref1=z5l--z41--z2r; ref2=z11l--z43--z8r; ref3=z5r--z42--z8l; 
  432.  
  433.   p1=(fullserif.l(z3,z1,z2l,z2r,.5hs,.75hs)..
  434.       upnotch.r(ref1,angle upward,notch_length.uc)etchright soften(z22l,z22r)
  435.       upnotch.r(ref2,angle upward,notch_length.uc)etchright..
  436.       fullserif.r(z12,z10,z11l,z11r,.5hs,.5hs) soften(z23r,z23l) 
  437.       downnotch.r(ref3,angle(z22-z42),notch_length.uc) 
  438.       soften(z21r,z21l) z2l)--cycle;
  439.  
  440.   showpoints(1,2,3,4,5,6,7,8,9,10,11,12,21,22,23,31,33,41,42,43);
  441. adjust(v_B*fitbasis.uc#+m_a*f_mfit#,v_A*fitbasis.uc#+m_a*f_mfit#);
  442. show_character;endchar;
  443.  
  444.  
  445.  
  446. iff OK "N":  "The letter N"; 
  447.   beginchar("N",N_w*width#+b_mono#,cap#,0);
  448.  
  449.   save_bool(nonotch):=if(cap<40):true else:false fi;      % if real low res
  450.   min_limit(join_radius)(.5apex.uc);
  451.   bot lft z3l=(0,0);                 multpos(1,3,7,9)(thin_stem.uc,0); 
  452.   top rt z7r=(w,h)//;
  453.   top lft z31l=(0,h+ov_apex.uc)//;   multpos(21,22,31,32)(apex.uc,0-apex_angle);
  454.   bot rt z32r=(w,0-ov_apex.uc);
  455.   onaline(3l,31l)(2l,21l);  y21=h+ov_apex.uc;
  456.   onaline(7r,32r)(8r,22r);  y22=-ov_apex.uc;
  457.   z1l=z21l; z4r=z21r; z6l=z22l; z9r=z22r; 
  458.  
  459.   multpos(4,6)(stem.uc,constant_angle(z21r,z22l,stem.uc));       
  460.   onaline(1r,3r)(2r,41);  
  461.   onaline(4l,6l)(5l,41);    
  462.   onaline(4r,6r)(5r,42);  y5l=notch_pos[y41,y9];
  463.   onaline(7l,9l)(8l,42);  y5r=notch_pos[y42,y1];
  464.   y2l=y2r=h-y8l=h-y8r=min(cap_bracket_h,y41);
  465.  
  466.   ref1=z5l--z41--z2r; ref2=z5r--z42--z8l; 
  467.  
  468.   p1=(fullserif(z3,z1,z2l,z2r,.5hs,.75hs)..
  469.       upnotch.r(ref1,angle upward,notch_length.uc)etchright 
  470.       soften(z22l,z22r) fullserif(z7,z9,z8l,z8r,.75hs,.5hs)..
  471.       downnotch.r(ref2,angle downward,notch_length.uc)etchleft 
  472.       soften(z21r,z21l) z2l)--cycle;
  473.  
  474.  showpoints(1,2,3,4,5,6,7,8,9,21,22,31,32,41,42);
  475. adjust(v_B*fitbasis.uc#+m_a*b_mfit#,v_B*fitbasis.uc#+m_a*b_mfit#); 
  476. show_character; endchar;
  477.  
  478.  
  479.  
  480.  
  481. iff OK "O":  "The letter O"; 
  482.   beginchar("O",O_w*width#+d_mono#,cap#,0);
  483.  
  484.   if singlepitch:save circ; circ1=circ2=circ3=.75; fi
  485.   top z1=(h_stress*w,h+ov_t.uc)//;
  486.   lft z2=(0,(1-v_stress)*h)//;
  487.   bot z3=((1-h_stress)*w,-ov_b.uc)//;
  488.   rt z4=(w,v_stress*h)//;
  489.  
  490.   circular_shape(y1,y3,x2,x4,minor_curve.uc,bowlstem.uc); 
  491.  
  492.  showpoints(1,2,3,4);
  493. adjust(v_C*fitbasis.uc#+m_a*d_mfit#,v_C*fitbasis.uc#+m_a*d_mfit#); 
  494. show_character; endchar;
  495.  
  496.  
  497. iff OK "P": "The letter P"; 
  498.   beginchar("P",B_w*width#+b_mono#,cap#,0);
  499.  
  500.   top y2r=h;
  501.   bot y1=bot y2l=top y2r-minor_curve.uc;
  502.   y4=.45h; y5=.46h;
  503.   top y4r=top y5r=round(y4+.45minor_curve.uc);
  504.   bot y4l=top y4r-max(1,.9minor_curve.uc);
  505.   bot y5l=top y5r-max(1,.86minor_curve.uc);
  506.   rt z3r=(w,v_stress[y4l,y2r])//; 
  507.   lft z3l=(rt x3r-bowlstem.uc,v_stress[y4r,y2l]);
  508.  
  509.   top lft z11l=(0,h)//;           multpos(11,14)(stem.uc,0);
  510.   bot lft z14l=(0,0);             y13l=cap_bracket_h; 
  511.   onaline(11l,14l)(12l,13l);      y12l=max(h-cap_bracket_h,y13l);
  512.   onaline(11r,14r)(1,5l,5r,13r);  y13r=min(cap_bracket_h,y5l);
  513.  
  514.   good_x_for(2r)(z1,z3r,.4)a;  good_x_for(2l)(z1,z3l,.4)b;
  515.   good_x_for(4r)(z5r,z3l,.4)c; good_x_for(4l)(z5l,z3r,.4)d;                
  516.  
  517.   p1=(fullserif(z14,z11,z13l,z13r,.5hs,.75hs)--z5l if softpath:)softjoin(z5l fi 
  518.      ...z4l{right} o_t z3r{upward} o_t z2r{left}...
  519.      leftserif(z11,z14,z12l,z14r,.5hs))--cycle;
  520.   p1'=z5r...z4r{right} i_t z3l{upward} i_t z2l{left}...z1--cycle;
  521.  
  522.  showpoints(1,2,3,4,5,11,12,13,14);
  523. adjust(v_A*fitbasis.uc#+m_b*b_mfit#,v_G*fitbasis.uc#+m_bb*b_mfit#); 
  524. show_character; endchar;
  525.  
  526.  
  527. iff OK "Q":  "The letter Q";  
  528.   beginchar("Q",O_w*width#+d_mono#,cap#,0);    
  529.                          
  530.   if singlepitch:save circ; circ1=circ2=circ3=.75; fi
  531.   top z1=(h_stress*w,h+ov_t.uc)//;
  532.   lft z2=(0,(1-v_stress)*h)//;
  533.   bot z3r=((1-h_stress)*w,-ov_b.uc)//; pos3(minor_curve.uc,-90);
  534.   rt z4=(w,v_stress*h)//;
  535.  
  536.   z11r=(.4x3l,y3r);        pos11(minor_curve.uc,60);
  537.   z12l=z3r-(.05w,0);       pos12(max(1,.8minor_curve.uc),90);  
  538.   z13r=(w,y12l)//;         pos13(max(1,.95stem.uc),60-.5oblique);     
  539.  
  540.   circular_shape(y1,y3r,x2,x4,minor_curve.uc,bowlstem.uc);   
  541.   p2 =z11l{1,.4}..z12l{right}..z13l{1,.7}--               
  542.       z13r{-1,-.7}..z12r{left}..z11r{-1,-.4}--cycle;
  543.  
  544.  showpoints(1,2,3,4,11,12,13);
  545. adjust(v_C*fitbasis.uc#+m_a*d_mfit#,v_C*fitbasis.uc#+m_a*d_mfit#); 
  546. show_character; endchar;
  547.  
  548.  
  549.  
  550.  
  551.  def R_without_beveled_join=
  552. iff OK "R":  "The letter R"; 
  553.   beginchar(82+alt5,R_w*width#+b_mono#,cap#,0); 
  554.   top y2r=h;
  555.   bot y1=bot y2l=top y2r-minor_curve.uc;
  556.   y5=.5h;
  557.   top y4r=top y5r=round(y5+.45minor_curve.uc);
  558.   bot y4l=bot y5l=top y5r-max(1,.9minor_curve.uc);
  559.   rt z3r=(if narrow_condition:w else:round(.9w)fi,v_stress[y4l,y2r])//;  
  560.   lft z3l=(rt x3r-bowlstem.uc,v_stress[y4r,y2l]);
  561.   top lft z11l=(0,h)//;            multpos(11,14)(stem.uc,0);  
  562.   bot lft z14l=(0,0);              y13l=cap_bracket_h; 
  563.   onaline(11l,14l)(12l,13l);       y12l=max(h-cap_bracket_h,y13l);
  564.   onaline(11r,14r)(1,5l,5r,13r);   y13r=min(cap_bracket_h,y5l);
  565.   good_x_for(2r)(z1,z3r,.4)a;   good_x_for(2l)(z1,z3l,.4)b;
  566.   good_x_for(4r)(z5r,z3l,.5)c;  good_x_for(4l)(z5l,z3r,.4)d;                
  567.   y20=y5l;
  568.  
  569.   ref1=z5l{right}...z4l o_t z3r{upward}; good_x_for(20)(z5l,z3r,.3)e;
  570.   z7l=ref1 intersectionpoint ((x20,0)--(x20,h));
  571.   bot rt z9r=(w,0);
  572.   multpos(7,9)(max(1,.9stem.uc),constant_angle(z7l,(x9r,0),stem.uc)lr);        
  573.   onaline(7l,9l)(8l);     y8l=min(cap_bracket_h,y7l);
  574.   onaline(7r,9r)(8r,21);  y21=h;
  575.   onaline(7,9)(22);       y22=0;
  576.   z40=ref1 intersectionpoint (z21--z9r);  
  577.   (t1,t2)=ref1 intersectiontimes (z21--z9r);
  578.   y8r=min(cap_bracket_h,y40); 
  579.  
  580.    p1 =(fullserif(z14,z11,z13l,z13r,.5hs,.75hs) soften(z5l,z7l)
  581.        terminalserif(z22,z7,z8l,z8r,.25ts,0)--z40 
  582.          if softpath:)softjoin(z40 fi
  583.        --subpath (t1,3) of ref1 o_t z2r{left}...
  584.        leftserif(z11,z14,z12l,z14r,.5hs))--cycle;
  585.    p1'=z4r{right} i_t z3l{upward} i_t z2l{left}...z1--z5r--cycle;
  586.  
  587.   showpoints(1,2,3,4,5,7,8,9,11,12,13,14,20,21,22,40);
  588.   adjust(v_A*fitbasis.uc#+m_b*b_mfit#,v_F*fitbasis.uc#+m_bb*b_mfit#); 
  589.   show_character; endchar;
  590.  enddef;
  591.  
  592.  def R_with_beveled_join=
  593. iff OK "R":  "The letter R"; 
  594.   beginchar(82+alt5,R_w*width#+b_mono#,cap#,0); 
  595.   top y2r=h;
  596.   bot y1=bot y2l=top y2r-minor_curve.uc;
  597.   y5=.5h;
  598.   top y4r=top y5r=round(y5+.35minor_curve.uc);
  599.   bot y4l=bot y5l=top y5r-max(1,.7minor_curve.uc);
  600.   rt z3r=(if narrow_condition:w else:round(.9w)fi,v_stress[y4l,y2r])//;  
  601.   lft z3l=(rt x3r-bowlstem.uc,v_stress[y4r,y2l]);
  602.   top lft z11l=(0,h)//;            multpos(11,14)(stem.uc,0);
  603.   bot lft z14l=(0,0);              y13l=cap_bracket_h; 
  604.   onaline(11l,14l)(12l,13l);       y12l=max(h-cap_bracket_h,y13l);
  605.   onaline(11r,14r)(1,5l,5r,13r);   y13r=min(cap_bracket_h,y5l);
  606.   good_x_for(2r)(z1,z3r,.4)a;   good_x_for(2l)(z1,z3l,.4)b;
  607.   good_x_for(4r)(z5r,z3l,.5)c;  good_x_for(4l)(z5l,z3r,.4)d;                
  608.   y20=y5r;
  609.  
  610.   ref1=z5l...z4l{right} o_t z3r{upward}; 
  611.   ref2=z3l{downward} i_t z4r{left}...z5r; good_x_for(20)(z5r,z3l,.1)e; 
  612.   z7l=ref2 intersectionpoint ((x20,0)--(x20,h));
  613.   (t3,t4)=ref2 intersectiontimes ((x20,0)--(x20,h));
  614.  
  615.   bot rt z9r=(w,0);
  616.   multpos(7,9)(max(1,.9stem.uc),constant_angle(z7l,(x9r,0),stem.uc)lr);        
  617.   onaline(7l,9l)(8l);     y8l=min(cap_bracket_h,y7l);
  618.   onaline(7r,9r)(8r,21);  y21=h;
  619.   onaline(7,9)(22);       y22=0;
  620.   z40=ref1 intersectionpoint (z21--z9r);
  621.   (t1,t2)=ref1 intersectiontimes (z21--z9r);
  622.   y8r=min(cap_bracket_h,y40); 
  623.  
  624.   p1=(subpath(0,t3) of ref2--z7l                   if softpath:)softjoin(z7l fi
  625.       --terminalserif(z22,z7,z8l,z8r,.25ts,base_terminal_angle)--z40 
  626.           if softpath:)softjoin(z40 fi
  627.       --(subpath (t1,infinity) of ref1 o_t z2r{left}...
  628.       leftserif(z11,z14,z12l,z14r,.5hs)--
  629.       fullserif(z14,z11,z13l,z13r,.5hs,.75hs)--
  630.       z1--z2l{right} i_t z3l{downward}))--cycle;
  631.  
  632.   showpoints(1,2,3,4,5,7,8,9,11,12,13,14,20,21,22,40);
  633.   adjust(v_A*fitbasis.uc#+m_b*b_mfit#,v_F*fitbasis.uc#+m_bb*b_mfit#); 
  634.   show_character; endchar;
  635.  enddef;
  636.  
  637.  vardef letter_R= save a,b;
  638.   vardef a=condition(beveled_join)t;testing_codes;R_with_beveled_join; enddef;
  639.   vardef b=condition(beveled_join)f;testing_codes;R_without_beveled_join;enddef;
  640.   if test_all_characters:a;b;else:if beveled_join:a; else:b; fi fi
  641.  enddef;
  642.  
  643.  letter_R;  save letter_R,R_with_beveled_join,R_without_beveled_join;
  644.  
  645.  
  646.  
  647. iff OK "S":  "The letter S"; 
  648.   beginchar("S",S_w*width#+b_mono#,cap#,0);
  649.  
  650.   save_num(term_length)=if bulb_taper:c_and_s.uc else:.9cs fi;
  651.   rt z1=(.93w,.95h)//;                 
  652.   lft z7=(0,.07h)//;     
  653.   top y2l=bot y2r+minor_curve.uc=h+ov_t.uc;  
  654.   bot y6r=top y6l-minor_curve.uc=-ov_b.uc;   
  655.   z4=(.5w,.52h)//;
  656.   lft z3l=(round(.05w),.5[y4,y2l])//; 
  657.   rt z5r=(w,.5[y6r,y4])//; 
  658.   good_x_for(2l)(z3l,z1,.5)a;  good_x_for(2r)(z3r,z1-(bulb_thickness,0),.4)b;
  659.   good_x_for(6r)(z7,z5r,.5)c;  good_x_for(6l)(z7+(bulb_thickness,0),z5l,.6)d;
  660.  
  661.   z3=z3l+(.5stem.uc,0); z5=z5r-(.5stem.uc,0);
  662.   ref1=z3..z4..z5;
  663.   pos4(stem.uc,(angle(postcontrol 1 of ref1-precontrol 1 of ref1))+90);
  664.   rt z3r=(lft x3l+stem.uc,(1-v_stress)[y4r,y2r]); 
  665.   lft z5l=(rt x5r-stem.uc,v_stress[y6l,y4l]);
  666.  
  667.   p1=bulb.tr(z1,z2r,z2l,term_length,bulb_thickness,90) 
  668.      o_t z3l{downward} o_t z4l i_t z5l i_t 
  669.      bulb.bl(z7,z6l,z6r,1.1term_length,bulb_thickness,90)
  670.      o_t z5r{upward} o_t z4r i_t z3r i_t cycle;
  671.  
  672.  showpoints(1,2,3,4,5,6,7,8);
  673. adjust(v_F*fitbasis.uc#+m_a*b_mfit#,v_F*fitbasis.uc#+m_a*b_mfit#); 
  674. show_character; endchar;
  675.  
  676.  
  677.  
  678. iff OK "T":  "The letter T"; 
  679.   beginchar("T",T_w*width#+b_mono#,cap#,0);
  680.  
  681.   bot z40=(.5w,0); pos40(stem.uc,0);
  682.   bot y14=0; lft x14l=round x40l; multpos(11,14)(stem.uc,0);
  683.   w:=2*x14l+stem.uc; 
  684.   top z11=(x14,h)//;
  685.   onaline(11l,14l)(13l,12l);  y13l=y13r=cap_bracket_h;
  686.   onaline(11r,14r)(13r,12r);  
  687.  
  688.   top lft z1=(0,h)//;
  689.   top rt z4=(w,h)//; 
  690.   top y2r=top y3r=h; x2r-x1=x4-x3r=.25w; x2r:=min(x2r,x11); x3r:=max(x3r,x11); 
  691.   bot y2l=bot y3l=bot y12l=bot y12r=top y2r-max(1,.95thin_stem.uc);
  692.   
  693.   good_x_for(2l)(z1+(tip_thickness,0),z12l,.6)a;  x2l:=min(x2l,x12l); 
  694.   good_x_for(3l)(z4-(tip_thickness,0),z12r,.6)b;  x3l:=max(x3l,x12r);
  695.  
  696.   p1=(fullserif(z14,z11,z13l,z13r,.75hs,.75hs)--z12r 
  697.         if softpath:)softjoin(z12r fi
  698.       --arm.tr(z4,z3l,z3r,.4as,.75tip_thickness,90)soft--
  699.       arm.tl(z1,z2l,z2r,.4as,.75tip_thickness,90)soft--z12l
  700.         if softpath:)softjoin(z12l fi--z13l)--cycle;
  701.  
  702.  showpoints(1,2,3,4,11,12,13,14,40);
  703. adjust(v_H*fitbasis.uc#+m_a*b_mfit#,v_H*fitbasis.uc#+m_a*b_mfit#); 
  704. show_character; endchar;
  705.  
  706.  
  707.  
  708.  
  709.  def U_like_lowercase=            % the letter U as a version of the lowercase u
  710. iff OK "U":  "The letter U"; 
  711.   beginchar(85+alt3,H_w*width#+b_mono#,cap#,0);
  712.   y5=ductal[arch_thickness.uc,h-serif_thickness];
  713.  
  714.   bot lft z1l=(0,0);           multpos(1,4,11,14)(stem.uc,0);
  715.   top lft z4l=(0,h)//;        
  716.   top rt z11r=(w,h)//;              
  717.   bot rt z14r=(w,0);          y13r=cap_bracket_h; y12l=max(h-cap_bracket_h,y5);
  718.   onaline(11l,14l)(5,12l);    y12r=max(h-cap_bracket_h,y13r);
  719.   onaline(11r,14r)(12r,13r);  y2r=max((.95-r_arch)*h,arch_thickness.uc);
  720.   onaline(1l,4l)(2l,3l);      y2l=(.95-l_arch)*h; y3l=max(h-cap_bracket_h,y2l);
  721.   onaline(1r,4r)(2r,3r);      y3r=max(h-cap_bracket_h,y2r);
  722.  
  723.   ref1=z12l..terminalserif.r(z14,z11,z12l,z13r,.75ts,x_terminal_angle);
  724.   ref2=arch.bl(z5,-ov_b.uc,z2r,z2l)uc; 
  725.   p1=terminalserif.l(z11,z14,z12l,z12r,.5ts,0)--softenit(ref1,ref2)--
  726.      terminalserif.l(z4,z1,z3l,z3r,.75ts,0)--
  727.      outer_juncture_path.br(ref2,ref1,2)--cycle;
  728.   showpoints(1,2,3,4,5,11,12,13,14);
  729.   adjust(.9v_A*fitbasis.uc#+m_a*b_mfit#,v_A*fitbasis.uc#+m_a*b_mfit#); 
  730.   show_character; endchar;
  731.  enddef;
  732.  
  733.  def U_like_trajan=
  734. iff OK "U":  "The letter U"; 
  735.   beginchar(85+alt3,U_w*width#+b_mono#,cap#,0);
  736.   top lft z11l=(0,h)//;  multpos(11,14)(stem.uc,0);
  737.   lft z14l=(0,0);
  738.   top rt z1r=(w,h)//;    multpos(1,4)(thin_stem.uc,0);
  739.   rt z4r=(w,0);
  740.   y13l=y13r-.5major_curve.uc=.3[major_curve.uc,h-serif_thickness];
  741.   y3r=y3l=.3[minor_curve.uc,h-serif_thickness];
  742.   onaline(11l,14l)(12l,13l);   y12l=max(h-cap_bracket_h,y13l); 
  743.   onaline(11r,14r)(12r,13r);   y12r=max(h-cap_bracket_h,y13r);
  744.   onaline(11,14)(40);   
  745.   onaline(1l,4l)(2l,3l);       y2l=max(h-cap_bracket_h,y3l);
  746.   onaline(1r,4r)(2r,3r);       y2r=max(h-cap_bracket_h,y3r);
  747.   onaline(1,4)(41);            y40=y41=h;
  748.   bot y5l=top y5r-major_curve.uc=-ov_b.uc;     
  749.   good_x_for(5l)(z11l,z1r,.5)a;  good_x_for(5r)(z11r,z1l,.5)b;
  750.  
  751.   p1=fullserif(z40,z14,z12l,z12r,.75hs,.75hs)...
  752.      z13l{downward} o_t z5l{right} o_t z3r{upward}...
  753.      fullserif(z41,z4,z2l,z2r,.75hs,.5hs)...
  754.      z3l{downward} i_t z5r{left} i_t z13r{upward}...cycle;
  755.  
  756.   showpoints(1,2,3,4,5,11,12,13,14,40,41);
  757.   adjust(.9v_A*fitbasis.uc#+m_a*b_mfit#,.9v_B*fitbasis.uc#+m_a*b_mfit#); 
  758.   show_character; endchar;
  759.  enddef; 
  760.  
  761.  vardef letter_U= save a,b;
  762.   vardef a=condition(like_lowercase)t; testing_codes;U_like_lowercase; enddef; 
  763.   vardef b=condition(like_lowercase)f; testing_codes;U_like_trajan;  enddef;
  764.   if test_all_characters:a;b; else:if like_lowercase:a;else:b; fi fi
  765.  enddef;
  766.  
  767.  letter_U;  save letter_U,U_like_lowercase,U_like_trajan;
  768.  
  769.  
  770.  
  771.  def character_points= 
  772. iff OK "V":  "The letter V"; 
  773.   beginchar(86+alt4,A_w*width#+e_mono#,cap#,0);
  774.   min_limit(join_radius)(.5apex.uc);
  775.   bot z20=(.5w,-ov_apex.uc); pos20(apex.uc,0-apex_angle);
  776.   lft z1l=(0,h)//;        multpos(1,3)(stem.uc,constant_angle(z1l,z20l,0));
  777.   rt z4r=(w,h)//;         multpos(4,6)(thin_stem.uc,constant_angle(z4r,z20r,0));
  778.   onaline(1l,20l)(2l,3l);   y3l=y20l;  
  779.   onaline(1r,3r)(2r,40);     
  780.   onaline(4r,20r)(5r,6r);   y6r=y20r;
  781.   onaline(4l,6l)(5l,40);    y2l=y2r=y5l=y5r=max(h-cap_bracket_h,y40);
  782.   onaline(1,3)(41);         top y41=top y42=h; 
  783.   onaline(4,6)(42);  
  784.   ref1=notch_pos[z40,z2r]--z40--notch_pos[z40,z5l];
  785.  
  786.   if flat_diagonal_endings: 
  787.         p1=(fullserif.l(z41,z3,z2l,z2r,.5hs,.5hs) soften(z20l,z20r)
  788.             fullserif.r(z42,z6,z5l,z5r,.5hs,.5hs)..
  789.             downnotch.r(ref1,angle(z20-z40),notch_length.uc))..cycle;
  790.    else:p1=(terminalserif.l(z41,z3,z2l,z2r,.75ts,20)soft soften(z20l,z20r)
  791.             terminalserif.l(z42,z6,z5l,z5r,.75ts,0)soft..
  792.             downnotch.r(ref1,angle(z20-z40),notch_length.uc))..cycle;
  793.    fi
  794.   showpoints(1,2,3,4,5,6,20,40,41,42);
  795.   adjust(v_D*fitbasis.uc#+m_a*e_mfit#,v_E*fitbasis.uc#+m_a*e_mfit#); 
  796.   show_character; endchar;
  797.  enddef;
  798.  
  799.  vardef letter_V= save a,b;
  800.   vardef a=condition(flat_diagonal_endings)t; testing_codes; 
  801.            character_points; enddef;
  802.   vardef b=condition(flat_diagonal_endings)f; testing_codes; 
  803.            character_points; enddef;
  804.   if test_all_characters:a;b; else:if flat_diagonal_endings:a; else:b; fi fi
  805.  enddef;
  806.  
  807.  letter_V;  save letter_V;
  808.  
  809.  
  810.  
  811.  def character_points= 
  812. iff OK "W":  "The letter W with flat diagonals"; 
  813.   beginchar(87+alt4,W_w*width#+f_mono#,cap#,0);
  814.   min_limit(join_radius)(.5apex.uc);
  815.   lft z1l=(0,h)//; 
  816.   rt z10r=(w,h)//;
  817.   bot z21=(.22w,-ov_apex.uc);   multpos(21,22,23)(apex.uc,0-apex_angle);
  818.   bot z23=(w-x21,-ov_apex.uc);
  819.  
  820.   z3l=z21l; z6r=z21r; z9l=z23l; z12r=z23r;
  821.   multpos(1,3)(if narrow_condition:w_narrow_amt else:1 fi[thin_stem.uc,stem.uc],
  822.                constant_angle(z1l,z21l,0)); 
  823.   multpos(10,12)(thin_stem.uc,constant_angle(z10r,z23r,0));
  824.   onaline(1r,3r)(2r,41,46);    onaline(1l,3l)(2l);    onaline(1,3)(44);  
  825.   onaline(10l,12l)(11l,43,47); onaline(10r,12r)(11r); onaline(10,12)(45);
  826.  
  827.   top y44=h;y45=y46=y47=y44; 
  828.   x22=.5[x46,x47];  y22=if singlepitch:.75h else:h+ov_apex.uc fi;
  829.   z4l=z22l; z7r=z22r;
  830.   multpos(4,6)(thin_stem.uc,constant_angle(z22l,z21r,thin_stem.uc)lr);        
  831.   multpos(7,9)(if narrow_condition:w_narrow_amt else:1 fi[thin_stem.uc,stem.uc],
  832.                constant_angle(z22r,z23l,stem.lc));       
  833.   onaline(4l,6l)(5l,41);    onaline(4r,6r)(5r,42);  
  834.   onaline(7l,9l)(8l,42);    onaline(7r,9r)(8r,43); 
  835.   y5l=y8r=notch_pos[max(y41,y43),y22]; y5r=y8l=notch_pos[y42,y3l]; 
  836.   y2l=y2r=y11l=y11r=max(h-cap_bracket_h,y41,y43);  
  837.  
  838.   ref1=notch_pos[z41,z2r]--z41--z5l;
  839.   ref2=z8l--z42--z5r;
  840.   ref3=z8r--z43--notch_pos[z43,z11l];
  841.  
  842.   if flat_diagonal_endings:
  843.     p1=(fullserif.l(z44,z3,z2l,z2r,.5hs,.5hs) soften(z21l,z21r) 
  844.         upnotch.r(ref2,angle(z22-z42),notch_length.uc)
  845.         soften(z23l,z23r) fullserif.r(z45,z12,z11l,z11r,.5hs,.5hs)..
  846.         downnotch.r(ref3,angle(z23-z43),notch_length.uc) soften(z22r,z22l) 
  847.         downnotch.r(ref1,angle(z21-z41),notch_length.uc))..cycle;
  848.     else:p1=(terminalserif.l(z44,z3,z2l,z2r,.75ts,20)soft soften(z21l,z21r) 
  849.         upnotch.r(ref2,angle(z22-z42),notch_length.uc)
  850.         soften(z23l,z23r) terminalserif.l(z45,z12,z11l,z11r,.5ts,0)soft..
  851.         downnotch.r(ref3,angle(z23-z43),notch_length.uc) soften(z22r,z22l) 
  852.         downnotch.r(ref1,angle(z21-z41),notch_length.uc))..cycle;
  853.     fi
  854.   showpoints(1,2,3,4,5,6,7,8,9,10,11,12,21,22,23,41,42,43,44,45,46,47);
  855.   adjust(.25[v_D,v_A]*fitbasis.uc#+m_a*f_mfit#,
  856.          .25[v_E,v_A]*fitbasis.uc#+m_a*f_mfit#);
  857.   show_character;endchar;
  858.  enddef;
  859.  
  860.  vardef letter_W= save a,b;
  861.   vardef a=condition(flat_diagonal_endings)t; testing_codes;
  862.            character_points; enddef;
  863.   vardef b=condition(flat_diagonal_endings)f; testing_codes;
  864.            character_points; enddef;
  865.   if test_all_characters:a;b; else:if flat_diagonal_endings:a; else:b; fi fi
  866.  enddef;
  867.  
  868.  letter_W;  save letter_W;
  869.  
  870.  
  871.  
  872.  
  873.  def character_points=
  874. iff OK "X":  "The letter X"; 
  875.   beginchar(88+alt4,A_w*width#+e_mono#,cap#,0);
  876.   top z1l=(.05w,h)//; top z11r=(.95w,h)//;
  877.   bot z4r=(w,0);      bot z14l=(0,0); 
  878.   multpos(1,4)(stem.uc,constant_angle(z1l,z4r,stem.uc)lr);        
  879.   multpos(11,14)(thin_stem.uc,constant_angle(z11r,z14l,thin_stem.uc));        
  880.   onaline(1l,4l)(2l,3l,42,43);   
  881.   onaline(1r,4r)(2r,3r,40,41);   
  882.   onaline(1,4)(21,22);             top y21=top y23=h;
  883.   onaline(11l,14l)(12l,13l,40,43); 
  884.   onaline(11r,14r)(12r,13r,41,42); 
  885.   onaline(11,14)(23,24);           bot y22=bot y24=0;
  886.   y2l=y2r=y12l=y12r=max(h-serif_thickness-.5cap_bracket_h,y40);
  887.   y3l=y3r=y13l=y13r=min(serif_thickness+.5cap_bracket_h,y42);
  888.  
  889.   ref1=notch_pos[z40,z2r]--z40--notch_pos[z40,z12l];
  890.   ref2=notch_pos[z42,z3l]--z42--notch_pos[z42,z13r];
  891.  
  892.   if flat_diagonal_endings:p1=fullserif(z21,z4,z2l,z2r,.5hs,.25hs)--z43--
  893.       fullserif(z24,z11,z13l,z13r,.5hs,.5hs)--
  894.       upnotch.r(ref2,angle(z40-z42),notch_length.uc)--
  895.       fullserif(z22,z1,z3l,z3r,.5hs,.5hs)--z41--
  896.       fullserif(z23,z14,z12l,z12r,.25hs,.5hs)-- 
  897.       downnotch.r(ref1,angle(z42-z40),notch_length.uc)--cycle;
  898.     else:p1=terminalserif.l(z21,z4,z2l,z2r,.5ts,0)soft--z43--
  899.       terminalserif.r(z24,z11,z13l,z13r,.5ts,0)soft--
  900.       upnotch.r(ref2,angle(z40-z42),notch_length.uc)--
  901.       terminalserif.r(z22,z1,z3l,z3r,.5ts,diag_terminal_angle)soft--z41--
  902.       terminalserif.l(z23,z14,z12l,z12r,.5ts,0)soft--
  903.       downnotch.r(ref1,angle(z42-z40),notch_length.uc)--cycle;
  904.     fi
  905.   showpoints(1,2,3,4,11,12,13,14,21,22,23,24,40,41,42,43);
  906.   adjust(v_G*fitbasis.uc#+m_a*e_mfit#,v_G*fitbasis.uc#+m_a*e_mfit#); 
  907.   show_character; endchar;
  908.  enddef;
  909.  
  910.  vardef letter_X= save a,b;
  911.   vardef a=condition(flat_diagonal_endings)t; testing_codes; 
  912.            character_points; enddef;
  913.   vardef b=condition(flat_diagonal_endings)f; testing_codes;
  914.            character_points; enddef;
  915.   if test_all_characters:a;b; else:if flat_diagonal_endings:a; else:b; fi fi
  916.  enddef;
  917.  
  918.  letter_X;  save letter_X;
  919.  
  920.  
  921.  
  922. iff OK "Y":  "The letter Y"; 
  923.   beginchar("Y",A_w*width#+e_mono#,cap#,0);
  924.  
  925.   bot z20=(.5w,0); multpos(15,20,42)(stem.uc,0);
  926.   bot y15=0; lft x15l=round x20l; 
  927.   w:=2*x15l+stem.uc; 
  928.  
  929.   top lft z11l=(0,h)//; 
  930.   top rt z1r=(w,h)//; 
  931.   z42r=whatever[z15r,z15r+dir(90-oblique)]; y42r=.45[y15,y11l];
  932.   multpos(11,13)(stem.uc,constant_angle(z11l,z42r,stem.uc)lr);        
  933.   multpos(1,3)(thin_stem.uc,constant_angle(z1r,z42r,0));
  934.  
  935.   z3r=z13r=z42r; 
  936.   onaline(1r,3r)(2r);        
  937.   onaline(1l,3l)(2l,40);     y2r=max(h-.5cap_bracket_h,y42r);
  938.   onaline(1,3)(45);          top y44=top y45=h;
  939.   onaline(11l,13l)(12l,41);  z41=whatever[z15l,z15l+dir(90-oblique)];
  940.   onaline(15l,41)(14l);      y14l=min(.3serif_thickness+.7cap_bracket_h,y41);
  941.   onaline(11r,13r)(12r,40);  y2l=y12r=max(h-.5cap_bracket_h,y40);
  942.   onaline(11,13)(44);        y12l=max(h-.5cap_bracket_h,y41);
  943.   onaline(15r,42r)(14r);     y14r=min(.3serif_thickness+.7cap_bracket_h,y42r);
  944.  
  945.   ref1=notch_pos[z40,z12r]--z40--notch_pos[z40,z2l];
  946.  
  947.   p1=(fullserif.l(z44,z13,z12l,z12r,.5hs,.25hs)--
  948.       z41 if softpath:)softjoin(z41 fi--
  949.       fullserif(z15,.5[z14l,z14r],z14l,z14r,.75hs,.75hs)--
  950.       z42r if softpath:)softjoin(z42r fi--
  951.       fullserif.r(z45,z42,z2l,z2r,.25hs,.5hs)--
  952.       downnotch.r(ref1,angle downward,notch_length.uc))--cycle; 
  953.  
  954.   showpoints(1,2,3,11,12,13,14,15,20,40,41,42,44,45);
  955. adjust(v_H*fitbasis.uc#+m_a*e_mfit#,v_H*fitbasis.uc#+m_a*e_mfit#); 
  956. show_character; endchar;
  957.  
  958.  
  959.  
  960. iff OK "Z":  "The letter Z"; 
  961.   beginchar("Z",S_w*width#+b_mono#,cap#,0);
  962.   
  963.   min_limit(join_radius)(.5apex.uc);
  964.   top rt z1r=(w,h-apex.uc)//; 
  965.   bot lft z3l=(0,apex.uc);        
  966.   multpos(1,3)(max(1,.98stem.uc),constant_angle(z1r,z3l,max(1,.98stem.uc)));
  967.  
  968.   z43=(x1r,h);
  969.   z41=(x3l,0);
  970.   rt z14=(w,0); 
  971.   lft z11=(.05w,h)//;
  972.   top y12r=h; bot y12l=bot y40=top y12r-max(1,.95thin_stem.uc);
  973.   bot y13l=0; top y13r=top y42=bot y13l+max(1,.95thin_stem.uc);
  974.   onaline(1l,3l)(2l,40);  y2l=notch_pos[y40,y3l];
  975.   onaline(1r,3r)(2r,42);  y2r=notch_pos[y42,y1r];  
  976.   good_x_for(12r)(z11,z43,.5)a;good_x_for(12l)(z11+(tip_thickness,0),z40,.5)b;
  977.   good_x_for(13l)(z41,z14,.5)c;good_x_for(13r)(z42,z14-(tip_thickness,0),.5)d;
  978.  
  979.   ref1=z2l--z40--z12l; ref2=z2r--z42--z13r;
  980.  
  981.   p1=(arm.tl(z11,z12l,z12r,.4as,tip_thickness,90)soft--
  982.       rightnotch.r(ref1,angle right,notch_length.uc)etchdown
  983.       soften(z2l,z3l,z41,z13l)
  984.       arm.br(z14,z13r,z13l,.5as,tip_thickness,90-arm_angle)soft--
  985.       leftnotch.r(ref2,angle left,notch_length.uc)etchup
  986.       soften(z2r,z1r,z43) z12r)--cycle;
  987.  
  988.   showpoints(1,2,3,11,12,13,40,41,42,43);
  989. adjust(v_H*fitbasis.uc#+m_a*b_mfit#,v_H*fitbasis.uc#+m_a*b_mfit#); 
  990. show_character; endchar; 
  991.  
  992.  
  993.